package com.skyable.device.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.skyable.common.common.ServiceResult;
import com.skyable.device.entity.DomainDeviceInfo;

import java.util.List;
import java.util.Map;

/**
 * @author GaoYuan
 * @title: IDomainDeviceInfo
 * @projectName private-cloud
 * @description: TODO
 * @date 2021/7/313:52
 */
public interface IDomainDeviceInfoService extends IService<DomainDeviceInfo> {

    /**
     * 根据id取得domain_device_info对象
     * @param physicalDeviceId
     * @return
     */
    ServiceResult<DomainDeviceInfo> getDomainDeviceInfoById(String physicalDeviceId);


    /**
     * 获取设备列表
     * @return
     */
    ServiceResult<List<DomainDeviceInfo>> getDomainDeviceInfoList();

    /**
     * 获取设备列表   应用->设备管理->设备列表
     * @param domainDeviceInfo
     * @param page
     * @param limit
     * @return
     */
    ServiceResult<Map<String,Object>> getDomainDeviceInfoList(DomainDeviceInfo domainDeviceInfo, Integer page , Integer limit);

    /**
     * 获取设备授权列表
     * @param domainDeviceInfo
     * @param page
     * @param limit
     * @return
     */
    ServiceResult<Map<String,Object>> getDeviceAuthList(DomainDeviceInfo domainDeviceInfo, Integer page, Integer limit);

    /**
     * 获取激活状态的设备的数量
     * @param domainId
     * @param subDomainId
     * @return
     */
    ServiceResult<Integer> getDeviceCountByActiveStatus(Long domainId, Long subDomainId);

    /**
     * 获取在线状态的设备数量
     * @param domainId
     * @param subDomainId
     * @return
     */
    ServiceResult<Integer> getDeviceCountByOnlineStatus(Long domainId, Long subDomainId);

    /**
     * 根据条件获取设备数量
     * @param domainId
     * @param params
     * @return
     */
    ServiceResult<Integer> getDeviceCountByParam(Long domainId, Map<String,Object> params);

    /**
     * 入库单个设备
     * @param domainDeviceInfo
     * @param domainId
     * @return
     */
    ServiceResult<Boolean> importDeviceInfo(DomainDeviceInfo domainDeviceInfo, Long domainId, Map<String, Object> queryMap);

    /**
     * 入库多个设备
     * @param devices
     * @param domainId
     * @param queryMap
     * @return
     */
    ServiceResult<Boolean> importDeviceInfoList(List<DomainDeviceInfo> devices, Long domainId, Map<String, Object> queryMap);

    /**
     * 获取设备列表 应用->设备管理-> 设备删除 （单个设备）
     * @param domainId
     * @param physicalDeviceId
     * @param queryMap
     * @return
     */
    ServiceResult<Boolean> deleteDevice(Long domainId, String physicalDeviceId, Map<String, Object> queryMap);

    /**
     * 获取设备列表 应用->设备管理-> 设备删除 （多个设备）
     * @param domainId
     * @param physicalDeviceIds
     * @param queryMap
     * @return
     */
    ServiceResult<Boolean> deleteDevices(Long domainId, String[] physicalDeviceIds, Map<String, Object> queryMap);

    /**
     * 创建设备表结构(包括设备设备基础表、设备设备绑定、分享码表)
     * @param domainId
     * @return
     */
    ServiceResult<Integer> createDomainDeviceTable(Long domainId);

    /**
     * 查看设备版本列表
     * @param domainId  主域id
     * @param subDomainId   子域id
     * @param otaType  ota类型 (mcu or wifi) 允许值: system, commModule
    (ota 类型, system(MCU升级), commModule(通信模组升级)允许值: system, commModule)
     * @return   List<String>   版本号list
     */
    ServiceResult<List<String>> listDeviceVersions(Long domainId, Long subDomainId, String otaType);

}
